文件操作是IO的一种,涉及到node.js
设计思想中非常重要的异步IO
安装引入
使用时需要引入:
1
| const fs = require('fs');
|
同步与异步的区别
- 同步:当代码执行时,下面的代码只能等待其执行完毕后才能执行,参数没有回调函数,有返回值,返回值与异步中的特殊参数一致
- 异步:参数有回调函数,回调函数中有特殊参数,无返回值
一般回调函数的第一个参数是错误对象 err,如果 err 为 null,表示没有错误,否则报错
因此建议回调函数内部使用
常用操作
- fs.xxx:异步操作
- fs.xxxSync:同步操作
查看文件
异步操作
1
| fs.stat(path[, options], callback)
|
- path:访问文件的路径
- options:可选参数,默认false
- callback:回调函数,回调函数参数:特殊对象stats
同步操作
1
| fs.statSync(path[, options])
|
返回值与异步中的stats对象
性质一样
stats常用属性
其他属性参考API
属性名 |
属性含义 |
atime |
文件访问时间 |
mtime |
文件数据发生变化的时间 |
ctime |
文件的状态信息发生变化的时间(比如文件权限) |
birthtime |
文件创建时间 |
stats常用方法
其他方法参考API
方法名 |
方法含义 |
stats.isFile() |
是否为文件 |
stats.isDirectory() |
是否为目录 |
读取文件
会把所有的文件内容全部加载到内存,只适合内容量比较少的文件
异步操作
1
| fs.readFile(path[, options], callback)
|
- path:文件的全路径
- options:可选参数,
编码encording
和 标记flag(指定文件是读还是写,默认r)
- callback:回调函数,回调函数参数:读取到的文件的内容 data
如果options存在并且为编码,那么回调函数获取的数据就是字符串,否则为Buffer实例对象
获取文本内容示例
1 2
| fs.readFile(path,(err,data) => console.log(data.toString())) fs.readFile(path,'utf8',(err,data) => console.log(data))
|
同步操作
1
| fs.readFileSync(path[, options])
|
参数一样,返回值与异步中的data性质一样
写入文件
尽量只调用一次,会把所有的文件内容全部加载到内存,只适合内容量比较少的文件
异步操作
1
| fs.writeFile(file, data[, options], callback)
|
- file:文件的全路径
- data:写入的数据
- options:可选参数:
编码encording
(默认utf8)、控制文件权限mode(默认 0o666)和 标记flag(指定文件是读还是写,默认w)
- callback:回调函数(仅有参数err)
获取文本内容示例
1
| fs.writeFile(path,(err) => {})
|
同步操作
1
| fs.writeFileSync(path[, options])
|
参数一样,无返回值
重命名文件
异步操作
1
| fs.rename(oldPath, newPath, [callback(err)])
|
- oldPath:原路径
- newPath:新路径
- callback:可选参数,回调函数(仅有参数err)
同步操作
1
| fs.renameSync(oldPath, newPath)
|
参数一样,无返回值